﻿using System;
using System.Configuration;
using System.Data.Entity;

namespace WindowsFormsTest
{
    class OracleDbContext : DbContext
    {
        /// <summary>
        ///     OracleDbContext
        /// </summary>
        public OracleDbContext() : base("OracleDbContext")
        {
            Database.Log = Console.WriteLine;
        }

        public DbSet<OrderTest> OrderTest { get; set; }

        /// <summary>
        ///     OnModelCreating
        /// </summary>
        /// <param name="modelBuilder"></param>
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            Configuration.UseDatabaseNullSemantics = true;//关闭EF自动生成的null判断语句
            Database.SetInitializer<OracleDbContext>(null);//null禁用给定上下文的初始化,以避免输出没用的SQL语句打印。
            //应用程序启动时自动升级
            //Database.SetInitializer(new MigrateDatabaseToLatestVersion<OracleDbContext, Configuration>());
            modelBuilder.HasDefaultSchema("MES00");//MES00必须大写，跟Oracle里面一模一样.
            //modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
            //modelBuilder.Conventions.Remove<DatabaseGeneratedAttributeConvention>();
            //modelBuilder.Entity<OrderTest>().ToTable("ORDERTEST");//除非表名字和实体不一样。Oracle数据库表名大写，这个必须设置。或者在类Model上加上属性Table,作用是将类将映射到的表的名称。
            //自增列需要在数据库建序列+触发器配合生成
            //配置此实体类型的主键属性
            //modelBuilder.Entity<OrderTest>().HasKey(o => o.ID);
            //配置用于存储属性的数据库列的名称。映射类名字字段与数据库列名一致
            //modelBuilder.Entity<OrderTest>().Property(o => o.NAME).HasColumnName("NAME");
        }
    }
}